#include "gpio.h"
#include "key_IT.h"

extern void printf(const char *fmt, ...);

void do_irq(void) 
{
 // 1. 获取中断号   GICC_IAR[9:0]
 unsigned int irq_num;
 irq_num = GICC->IAR & 0x3FF;
 // 2. 进入到中断处理程序
 switch(irq_num) {
  case 97:
   break;
  case 98:
   break;
  case 99:  // 99号中断处理程序
    // 3. 调用99号中断处理程序 让LED1交替闪烁/或者使用printf打印函数
    printf("key zhong duan \n");
    hal_led_init();
    hal_led_flash();
    GPIOE->ODR ^= (0x01 << 10);
    // 4. 清除EXTI层中断挂起标志位   EXTI_FPR1[9] = 0x1
    EXTI->FPR1 |= (0x1 << 9);
    // 5. 清除GICD层中断挂起标志位   GICD_ICPENDR3[3] = 0x1 
    GICD->ICPENDR[3] |= (0x1 << 3);
   break;
  case 100:
   break;
 }
 // 6. 清除GICC层的中断号  GICC_EOIR
 GICC->EOIR = irq_num;
}